package com.example.homeworkrabbitmq.config;

import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitConfig {

    /**
     * 声明死信队列
     * @return
     */
    @Bean
    public Queue dlxQueue(){
        return QueueBuilder.durable("q.dlx").build();
    }

    /**
     * 声明死信交换机
     * @return
     */
    @Bean
    public Exchange dlxExchange(){
        return ExchangeBuilder.directExchange("e.dlx").build();
    }

    /**
     * 绑定死信队列，死信交换机
     * @return
     */
    @Bean
    public Binding dlxBinding(){
        //路由模式，路由模式，可以让路由key就是队列名称
        return BindingBuilder.bind(dlxQueue()).to(dlxExchange()).with("q.dlx").noargs();
    }

    /**
     * 创建业务队列，指定ttl，指定死信交互机和死信队列
     * @return
     */
    @Bean
    public Queue bizQueue(){
        return QueueBuilder.durable("q.biz")
                .ttl(10*1000)
                .deadLetterExchange("e.dlx")
                .deadLetterRoutingKey("q.dlx")
                .build();

    }

    /**
     * 创建普通交换机
     * @return
     */
    @Bean
    public Exchange bizExchange(){
        return ExchangeBuilder.directExchange("e.biz").build();
    }

    /**
     * 普通绑定
     * @return
     */
    @Bean
    public Binding bizBinding(){
        return BindingBuilder.bind(bizQueue()).to(bizExchange()).with("q.biz").noargs();
    }
}
